package co.edu.udea.xyz.bl.impl;

import java.util.List;

import org.apache.log4j.Logger;

import co.edu.udea.xyz.bl.SucursalService;
import co.edu.udea.xyz.dao.SucursalDAO;
import co.edu.udea.xyz.dto.Solicitud;
import co.edu.udea.xyz.dto.Sucursal;
import co.edu.udea.xyz.util.Validaciones;
import co.edu.udea.xyz.util.exception.BLInversionesException;
import co.edu.udea.xyz.util.exception.XYZException;

public class SucursalServiceImpl implements SucursalService {
	static final Logger log = Logger.getLogger(SucursalServiceImpl.class);
	SucursalDAO sucursalDAO;
	
	public SucursalDAO getSucursalDAO() {
		return sucursalDAO;
	}

	public void setSucursalDAO(SucursalDAO sucursalDAO) {
		this.sucursalDAO = sucursalDAO;
	}

	public SucursalServiceImpl() {
		
	}

	@Override
	public void crearSucursal(int idSucursal, String nombre, String direccion, String email, String Ciudad, 
			int telefono, String pais) throws BLInversionesException, XYZException {
		log.info("Estamos guardando la sucursal, validamos que sea un id valido.");
		Sucursal sucursalBD = null; 
		Sucursal sucursal = null;		
		if(idSucursal <= 0){
			throw new BLInversionesException("El id sucursal no es valido, debe ser un numero positivo.");
		}else{
		sucursalBD = sucursalDAO.obtener(idSucursal); //Preguntar a la base de datos si existe
		log.info("se busca en base de datos");
					
			sucursal = new Sucursal();
				log.info("NO EXISTE, SE PUEDE GUARDAR");
				if(nombre == null || "".equals(nombre)){
					throw new BLInversionesException("nombre no puede ser null ni vacio");
				}else{
					sucursal.setIdSucursal(idSucursal);
					sucursal.setNombre(nombre); 
				}	
				if(direccion == null || "".equals(direccion)){
					throw new BLInversionesException(" direccion no puede ser null ni vacio");
				}else{
					sucursal.setDireccion(direccion); 
				}
				if(Ciudad == null || "".equals(Ciudad)){
					sucursal.setCiudad(null);
				}else{
					sucursal.setCiudad(Ciudad);
				}
				if(pais == null || "".equals(pais)){
					sucursal.setPais(null);
				}else{
					sucursal.setPais(pais); 
				}
				if(telefono <= 0){
					sucursal.setTelefono(0);
				}else{
					sucursal.setTelefono(telefono); 
				}
				if(!Validaciones.isEmail(email)){
					log.info("El email no fue aceptado, ingrese uno valido.");
					throw new BLInversionesException("El email debe ser valido");
				}else{
					sucursal.setEmail(email); 
				}
				log.info("VALIDACIONES CORRECTAS GUARDANDO");
				sucursalDAO.guardar(sucursal); 
			}
		
	}
		

	@Override
	public void actualizarSucursal(int idSucursal, String nombre, String direccion, String email, String Ciudad, 
			int telefono, String pais) throws BLInversionesException, XYZException {
		
		Sucursal sucursalBD = null; 
		Sucursal sucursal = null;		
		if(idSucursal <= 0){
			throw new BLInversionesException("El id sucursal no es valido, debe ser un numero positivo.");
		}else{
		sucursalBD = sucursalDAO.obtener(idSucursal); //Preguntar a la base de datos si existe
			if(sucursalBD.getIdSucursal() != idSucursal){
				log.info("Error la sucursal no existe.");
				throw new BLInversionesException("El sucursal no existe\n Por favor use el metodo crearSucursal/(/). ");
			}else{
				log.info("La sucursal si existe");
				sucursal = new Sucursal();
				
				if(nombre == null || "".equals(nombre)){
					String nombreBD = sucursalBD.getNombre();
					sucursal.setNombre(nombreBD); 
				}else{
					sucursal.setNombre(nombre); 
				}	
				if(direccion == null || "".equals(direccion)){
					String direccionBD = sucursalBD.getDireccion();
					sucursal.setDireccion(direccionBD); 
				}else{
					sucursal.setDireccion(direccion); 
				}
				if(Ciudad == null || "".equals(Ciudad)){
					String ciudadDB = sucursalBD.getCiudad();
					sucursal.setCiudad(ciudadDB);
				}else{
					sucursal.setCiudad(Ciudad);
				}
				if(pais == null || "".equals(pais)){
					String paisBD = sucursalBD.getPais();
					sucursal.setPais(paisBD);
				}else{
					sucursal.setPais(pais); 
				}
				if(telefono <= 0){
					sucursal.setTelefono(0);
				}else{
					sucursal.setTelefono(telefono); 
				}
				if(!Validaciones.isEmail(email)){
					log.info("El email no fue aceptado, ingrese uno valido.");
					throw new BLInversionesException("El email debe ser valido");
				}else{
					sucursal.setEmail(email); 
				}
				log.info("La sucursal con datos listos para actualizar");
				
				sucursalDAO.actualizar(sucursal);
						
				}
			}
		

	}

	@Override
	public Sucursal obtenerSucursal(int idSucursal)throws BLInversionesException, XYZException {
		log.info("Se obtiene la sucursal si existe en la base de datos.");
		if(idSucursal<=0){
			throw new BLInversionesException("El Id de la Sucursal no corresponde a un registro de la base de datos."+"\n Recuerde que debe ser un numero positivo.");
		}
		Sucursal sucursalBD = new Sucursal();
		sucursalBD = sucursalDAO.obtener(idSucursal);
		return sucursalBD;
	}

	@Override
	public List<Sucursal> obtenerListaSucursales() throws BLInversionesException, XYZException {
		log.info("Metodo obtener listado de sucursales de la base de datos.");
		List<Sucursal> listaSucursales = null;
		listaSucursales = sucursalDAO.obtener();
		return listaSucursales;
	}

	@Override
	public List<Solicitud> obtenerSolicitudesSucursal(Sucursal sucursal)throws BLInversionesException, XYZException{
		log.info("Obtener la lista de las solicitudes para la sucursal");
		Sucursal sucursalBD = null;
		sucursalBD = sucursalDAO.obtener(sucursal.getIdSucursal());
		if(sucursalBD == null){
			throw new BLInversionesException("Error en el parametro sucursal.");
		}else{
			List<Solicitud> solicitudes = sucursalDAO.getSolicitudesSucursal(sucursalBD);
			
			return solicitudes;
		}
		
	
	}
	
}
